﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ProjControleModelos;

namespace ProjControleDAL
{
   public class AgendamentoDAL
   {
       SqlCommand cmd;
       Dados objD = null;
       public AgendamentoDAL()
       {
       }
       #region Métodos
        //inserir
       public void inserir(Agendamento objA)
       {
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "insert into agendamento values (@descricao,@sts,@dt_agendamento,@hr_agendamento," +
                   "@cod_cliente,@cod_funcionario,@solucao)";
               cmd.Parameters.Add(new SqlParameter("@descricao", SqlDbType.VarChar)).Value = objA.descricao_agendamento;
               cmd.Parameters.Add(new SqlParameter("@sts", SqlDbType.VarChar)).Value = objA.status;
               cmd.Parameters.Add(new SqlParameter("@dt_agendamento", SqlDbType.Date)).Value = objA.dt_agendamento;
               cmd.Parameters.Add(new SqlParameter("@hr_agendamento", SqlDbType.DateTime)).Value = objA.hr_agendamento;
               cmd.Parameters.Add(new SqlParameter("@cod_cliente", SqlDbType.Int)).Value = objA.cod_cliente;
               cmd.Parameters.Add(new SqlParameter("@cod_funcionario", SqlDbType.Int)).Value = objA.cod_funcionario;
               cmd.Parameters.Add(new SqlParameter("@solucao", SqlDbType.Text)).Value = objA.solucao_agendamento;
               objA.cod_agendamento = objD.executaComandoAI(cmd, "agendamento");
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objD = null;
       }
       //update
       public void alterar(Agendamento objA)
       {
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "update agendamento set descricao_agendamento = @descricao,status_agendamento = @sts,dt_agendamento = @dt_agendamento," +
                   "hr_agendamento = @hr_agendamento,cod_cliente = @cod_cliente,cod_funcionario = @cod_funcionario,solucao_agendamento = @solucao " +
               "where cod_agendamento = @codigo";
               cmd.Parameters.Add(new SqlParameter("@descricao", SqlDbType.VarChar)).Value = objA.descricao_agendamento;
               cmd.Parameters.Add(new SqlParameter("@sts", SqlDbType.VarChar)).Value = objA.status;
               cmd.Parameters.Add(new SqlParameter("@dt_agendamento", SqlDbType.Date)).Value = objA.dt_agendamento;
               cmd.Parameters.Add(new SqlParameter("@hr_agendamento", SqlDbType.DateTime)).Value = objA.hr_agendamento;
               cmd.Parameters.Add(new SqlParameter("@cod_cliente", SqlDbType.Int)).Value = objA.cod_cliente;
               cmd.Parameters.Add(new SqlParameter("@cod_funcionario", SqlDbType.Int)).Value = objA.cod_funcionario;
               cmd.Parameters.Add(new SqlParameter("@solucao", SqlDbType.Text)).Value = objA.solucao_agendamento;
               cmd.Parameters.Add(new SqlParameter("@codigo", SqlDbType.Int)).Value = objA.cod_agendamento;
               objD.executaComando(cmd);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objD = null;
       }
       public void excluir(Agendamento objA)
       {
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "delete from agendamento where cod_agendamento = @codigo";
               cmd.Parameters.Add(new SqlParameter("@codigo", SqlDbType.Int)).Value = objA.cod_agendamento;
               objD.executaComando(cmd);
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objD = null;
       }
       public Agendamento localizar(int codigo)
       {
           Agendamento objA = null;
           DataTable tab;
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "select * from agendamento where cod_agendamento = @codigo";
               cmd.Parameters.Add(new SqlParameter("@codigo", SqlDbType.Int)).Value = codigo;
               tab = objD.executaConsulta(cmd);
               if(tab != null)
                   if (tab.Rows.Count == 1)
                   {
                       objA = new Agendamento(codigo,tab.Rows[0]["descricao_agendamento"].ToString(),
                           tab.Rows[0]["status_agendamento"].ToString(),
                           DateTime.Parse(tab.Rows[0]["dt_agendamento"].ToString()),
                           DateTime.Parse(tab.Rows[0]["hr_agendamento"].ToString()),
                           int.Parse(tab.Rows[0]["cod_cliente"].ToString()),
                           int.Parse(tab.Rows[0]["cod_funcionario"].ToString()),
                           tab.Rows[0]["solucao_agendamento"].ToString());
                   }
           }
           catch (Exception ex)
           {
               
               throw ex;
           }
           cmd = null;
           objD = null;
           return objA;
       }
       public DataTable localizar(String nome, DateTime dtInicial, DateTime dtFinal)
       {
           DataTable tab;
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "select a.cod_agendamento,c.nome_cliente,a.hr_agendamento " +
                                 "from agendamento a inner join clientes c " +
                                 "on a.cod_cliente = c.cod_cliente " +
                                 "where c.nome_cliente like @nome and a.dt_agendamento "+
                                 "between @dtInicial and @dtFinal";
               cmd.Parameters.Add(new SqlParameter("@nome", SqlDbType.VarChar)).Value = "%" + nome + "%";
               cmd.Parameters.Add(new SqlParameter("@dtInicial", SqlDbType.Date)).Value = dtInicial;
               cmd.Parameters.Add(new SqlParameter("@dtFinal", SqlDbType.Date)).Value = dtFinal;
               tab = objD.executaConsulta(cmd);
           }
           catch (Exception ex)
           {

               throw ex;
           }
           cmd = null;
           objD = null;
           return tab;
       }
       public DataTable localizar()
       {
           DataTable tab;
           try
           {
               cmd = new SqlCommand();
               objD = new Dados();
               cmd.CommandText = "select a.hr_agendamento,c.nome_cliente,a.status_agendamento,c.endereco_cliente,f.nome_funcionario,a.descricao_agendamento " +
            "from agendamento a,clientes c, funcionario f " +
             "where c.cod_cliente = a.cod_cliente and a.cod_funcionario = f.cod_funcionario and a.dt_agendamento = @dtAtual and a.status_agendamento = @status " +
             "order by a.hr_agendamento";
               cmd.Parameters.Add(new SqlParameter("@dtAtual", SqlDbType.Date)).Value = DateTime.Now;
               cmd.Parameters.Add(new SqlParameter("@status", SqlDbType.VarChar)).Value = "ABERTO";
               tab = objD.executaConsulta(cmd);
           }
           catch (Exception ex)
           {

               throw ex;
           }
           cmd = null;
           objD = null;
           return tab;
       }

       #endregion
   }
}
